package modelo;

import java.util.Vector;

public abstract class Plan {
	
	protected int nroPlan;
	protected String nombre;
	protected boolean permiteExcederse;
	protected boolean borrado;
	protected Vector<ItemPlan>items;
	private static int proximoNumero;
	
	private int getProximoNumero(){
		return ++proximoNumero;
	}
	
	
	public Plan(String nombre, Vector<Servicio> servicios, Vector<Float> cantServ,Vector<Float> costoAdicional, boolean permiteExcederse) 
	{
		nroPlan = getProximoNumero();
		this.nombre=nombre;
		this.permiteExcederse=permiteExcederse;
		this.borrado=false;
		
		this.items = new Vector<ItemPlan>();
		for (int i=0; i< servicios.size(); i++)
		{
			ItemPlan item = new ItemPlan( cantServ.elementAt(i), servicios.elementAt(i), costoAdicional.elementAt(i));
			this.items.add(item);
		}
	}

	
	public void modificarPlan(Vector<Servicio> servicios, Vector<Float> cantServ,Vector<Float> costoAdicional, boolean permiteExcederse) 
	{
		this.permiteExcederse=permiteExcederse;
		for (int i=0; i< servicios.size(); i++)
		{
			
			ItemPlan item = buscarItem(servicios.elementAt(i).getNombre());
			if (item!=null)
			{
				item.setCantidad(cantServ.elementAt(i));
				item.setCostoAdicional(costoAdicional.elementAt(i));
			}
		}
	}
	
	private ItemPlan buscarItem(String nombre)
	{	
		for (int i=0; i<this.items.size();i++)
		{
			if (this.items.elementAt(i).getNombreServicio().equalsIgnoreCase(nombre))
			{
				return this.items.elementAt(i);
			}
		}	
		return null;
	}
	
	public String toString() {
		return "Plan: [nombre=" + nombre + ", permiteExcederse="
				+ permiteExcederse + ", estado=" + borrado + ", items="+ items.toString()+"]";
	}

	protected boolean isPermiteExcederse() {
		return permiteExcederse;
	}


	protected void setPermiteExcederse(boolean permiteExcederse) {
		this.permiteExcederse = permiteExcederse;
	}


	public int getNroPlan() {
		return nroPlan;
	}


	public boolean isBorrado() {
		return borrado;
	}


	public void setBorrado(boolean estado) {
		this.borrado = estado;
	}


	protected Vector<ItemPlan> getItems() {
		return items;
	}


	protected void setItems(Vector<ItemPlan> items) {
		this.items = items;
	}
	
	
	public float calcularCostoPlan()
	{
		float costo=0;
		for (int i=0; i<this.items.size(); i++)
		{
			costo+= this.items.elementAt(i).getCostoServicio();
		}
		return costo;
	}

	
	public float getCantidadServicio(String nombreServicio)
	{
		for (int i=0; i< items.size(); i++)
		{
			if(items.elementAt(i).getServicio().getNombre().equalsIgnoreCase(nombreServicio))
				return items.elementAt(i).getCantidad();
		}
		return 0;
	}

	public float getCostoAdicional(String nombreServicio)
	{
		for (int i=0; i< items.size(); i++)
		{
			if(items.elementAt(i).getServicio().getNombre().equalsIgnoreCase(nombreServicio))
				return items.elementAt(i).getCostoAdicional();
		}
		return 0;
	}
	public Servicio getServicio(String nombreServicio)
	{
		for (int i=0; i< items.size(); i++)
		{
			if(items.elementAt(i).getServicio().getNombre().equalsIgnoreCase(nombreServicio))
				return items.elementAt(i).getServicio();
		}
	//	System.out.println("No existe un item para dicho servicio en el plan");
		return null;
	}

	public Vector<String> getServicios()
	{
		Vector<String> servicios=new Vector();
		
		for(int i=0; i < this.items.size();i++)
		{
			if(!servicios.contains(items.elementAt(i).getNombreServicio()))
			{
				servicios.add(items.elementAt(i).getNombreServicio());
			}
		}
		return servicios;
		
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}


	public Vector<PlanView> obtenerPlanesView(){
		Vector<PlanView> v = new Vector<PlanView>();
		PlanView pv = new PlanView(nroPlan, nombre, permiteExcederse, borrado, items);
		//v.add(pv.getNroPlan());
		v.add(pv);
		return v;
	}
	
	public Vector toVector(){
		Vector v = new Vector();
		PlanView pv = new PlanView(nroPlan, nombre, permiteExcederse, borrado, items);
		v.add(pv.getNroPlan());
		v.add(pv.getNombre());
		return v;
	}
	
	
	
	
	
}
